package com.example.commonback.mapper;

import org.apache.ibatis.annotations.*;

import java.util.HashMap;
import java.util.List;

/**
 * 通用后端 数据控制层
 *
 * @author Lv
 * @date 2022/8/10
 */
@SuppressWarnings("all")
@Mapper
public interface CommonMapper {
    /**
     * 无条件查询数据数量
     *
     * @param tableName 表名
     * @return
     */
    @Select("select count(1) from ${tableName}")
    @ResultType(Integer.class)
    Integer listAllCount(@Param("tableName") String tableName);

    /**
     * 无条件分页查询所有数据
     *
     * @param filed     查询字段
     * @param tableName 表名
     * @param start     分页页码
     * @param size      分页数据量
     * @return
     */
    @Select("select ${filed} from ${tableName} limit #{start},#{size}")
    @ResultType(HashMap.class)
    List<HashMap> listAll(@Param("filed") String filed, @Param("tableName") String tableName, @Param("start") int start, @Param("size") Integer size);

    /**
     * 带条件查询数据数量
     *
     * @param tableName 表名
     * @param where     条件
     * @return
     */
    @Select("select count(1) from ${tableName} where 1 = 1 ${where}")
    @ResultType(Integer.class)
    Integer listCountByWhere(@Param("tableName") String tableName, @Param("where") String where);

    /**
     * 带条件分页查询数据
     *
     * @param filed     查询字段
     * @param tableName 表名
     * @param where     条件
     * @param start     分页页码
     * @param size      分页数据量
     * @return
     */
    @Select("select ${filed} from ${tableName} where 1 = 1 ${where} limit #{start},#{size}")
    @ResultType(HashMap.class)
    List<HashMap> listByWhere(@Param("filed") String filed, @Param("tableName") String tableName, @Param("where") String where, @Param("start") int start, @Param("size") Integer size);

    /**
     * 插入数据
     *
     * @param tableName 表名
     * @param fileds    字段
     * @param values    值
     * @return
     */
    @Insert("insert into ${tableName} (${fileds}) values (${values})")
    @ResultType(Integer.class)
    int insert(@Param("tableName") String tableName, @Param("fileds") String fileds, @Param("values") String values);

    /**
     * 修改数据
     *
     * @param tableName 表名
     * @param where     条件
     * @param sets      修改字段以及值
     * @return
     */
    @Update("update ${tableName} set ${sets} where 1 = 1 ${where}")
    @ResultType(Integer.class)
    int update(@Param("tableName") String tableName, @Param("where") String where, @Param("sets") String sets);

    /**
     * 删除数据
     *
     * @param tableName 表名
     * @param where     条件
     * @return
     */
    @Delete("delete from ${tableName} where 1 = 1 ${where}")
    @ResultType(Integer.class)
    int delete(@Param("tableName") String tableName, @Param("where") String where);

    /**
     * 获取详情
     *
     * @param filed     字段
     * @param tableName 表名
     * @param where     条件
     * @return
     */
    @Select("select ${filed} from ${tableName} where 1 = 1 ${where} limit 1")
    @ResultType(HashMap.class)
    HashMap getPartFiled(@Param("filed") String filed, @Param("tableName") String tableName, @Param("where") String where);
}
